const express = require('express')
const app = express()
const cors = require('cors')

// const history = require('connect-history-api-fallback')
// app.use(history())

app.use(
  require('express-session')({
    secret: 'wangcijian'
  })
)

// 映射public目录中的静态资源
const path = require('path')
const staticRoot = path.resolve(__dirname, '../public')
app.use(express.static(staticRoot))

app.use(
  cors({
    origin(origin, callback) {
      if (!origin) {
        callback(null, '*')
        return
      }
      callback(null, origin)
    },
    // 前端要获取自定义的请求头后端必须设置才可以。
    exposedHeaders: ['authorization'],
    // 跨域携带cookie
    credentials: true
  })
)

// 加入cookie-parser 中间件
// 加入之后，会在req对象中注入cookies属性，用于获取所有请求传递过来的cookie
// const cookieParser = require('cookie-parser')
// app.use(cookieParser())

// 应用token中间件
app.use(require('../middleware/tokenMiddleware'))

// 解析 application/x-www-form-urlencoded 格式的请求体
app.use(express.urlencoded({ extended: true }))

// 解析 post 的body请求体。这样post请求就可以获取req.body了
app.use(express.json())

app.use(require('../middleware/captchaMiddleware'))

app.use('/api/admin', require('./api/admin.js'))
app.use('/api/user', require('./api/user.js'))
app.use('/api/article', require('./api/article.js'))
app.use('/api/column', require('./api/column.js'))
app.use('/api/upload', require('./api/upload.js'))

// 处理错误的中间件
app.use(require('../middleware/errorMiddleware'))

const port = 5008
app.listen(port, () => {
  console.log(`server listen on ${port}`)
})
